import java.util.*;

public class HJ25 {//数据分类处理
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//数据数
        String[] Datas = new String[n];
        for(int i = 0 ; i < n ; i++){//记录数据
            Datas[i]= String.valueOf(in.nextInt());
        }
        int m = in.nextInt();//规则数
        int all = 0;//总数据数="有效规则数"*2+"符合规则的数据条数"*2
        Map<Integer,Integer> RuleReslut = new LinkedHashMap<>();//记录<规则,符合规则的数据数>
        Map<Integer,Integer> Rulemap = new TreeMap<>();//记录规则数
        for(int i = 0 ; i < m ; i++){//记录规则集
            Rulemap.put(in.nextInt(),1);
        }
        for (Map.Entry<Integer,Integer> entry :Rulemap.entrySet()){
            String target = String.valueOf(entry.getKey()); // 将规则转换为字符串
            for(int j = 0 ; j < n ; j++){//遍历数据
                if (Datas[j].contains(target)){
                    RuleReslut.put(entry.getKey(), RuleReslut.getOrDefault(entry.getKey(), 0) + 1);//记录符合规则的数据条数
                    all++;
                }
            }
        }
        all += RuleReslut.size();
        System.out.print(all*2+" ");//输出总数据数
        for (Map.Entry<Integer,Integer> entry : RuleReslut.entrySet()){
            System.out.print(entry.getKey()+" ");//输出有效规则
            System.out.print(entry.getValue()+" ");//输出符合规则的数据数
            String target = String.valueOf(entry.getKey()); // 将规则转换为字符串
            for(int j = 0 ; j < n ; j++){//遍历数据
                if (Datas[j].contains(target)){
                    System.out.print(j+" ");//输出符合规则的数据位置
                    System.out.print(Datas[j]+" ");//输出符合规则的数据本身
                }
            }
        }
    }
}